Modules (মডিউল)
রাস্টে Modules একটি কোডকে সংগঠিত করার এবং ভিন্ন অংশে বিভক্ত করার জন্য ব্যবহৃত হয়। মডিউলগুলি ফাংশন, স্ট্রাকচার, এনাম, ট্রেইট, এবং অন্যান্য কোড উপাদানগুলি একত্রে গ্রুপ করে। এটি কোডের পাঠযোগ্যতা এবং রিইউজেবিলিটি উন্নত করতে সাহায্য করে এবং কোডের ভেতরে স্কোপ তৈরি করে যাতে গ্লোবাল নামের কনফ্লিক্ট এড়ানো যায়।
১.১ মডিউল তৈরি
রাস্টে মডিউল তৈরি করার জন্য mod কিওয়ার্ড ব্যবহার করা হয়। একটি মডিউল সাধারণত এক বা একাধিক ফাইলের মধ্যে বিভক্ত হতে পারে।
উদাহরণ (মডিউল তৈরি):
mod math {
pub fn add(x: i32, y: i32) -> i32 {
x + y
}
pub fn subtract(x: i32, y: i32) -> i32 {
x - y
}
}
fn main() {
let result = math::add(5, 3); // math মডিউলের add ফাংশন কল
println!("The result is: {}", result);
}এখানে, math একটি মডিউল যা দুটি পাবলিক ফাংশন add এবং subtract ধারণ করে। pub কিওয়ার্ডটি মডিউল উপাদানগুলিকে পাবলিক করে তোলে, অর্থাৎ এই ফাংশনগুলো বাইরের স্কোপে অ্যাক্সেস করা যাবে।
১.২ মডিউল এবং ফাইল সিস্টেম
রাস্টে মডিউলগুলি প্রায়ই ফাইল সিস্টেমের সাথে সম্পর্কিত থাকে। আপনি মডিউলকে আলাদা ফাইল হিসেবে বিভক্ত করতে পারেন:
- একটি মডিউল
math.rsনামের ফাইলে থাকতে পারে। - যদি একটি সাব-মডিউল থাকে, তাহলে এটি
mathফোল্ডারের মধ্যে একটিmod.rsফাইলে থাকতে পারে।
উদাহরণ (ফাইল ভিত্তিক মডিউল):
// main.rs
mod math;
fn main() {
let result = math::add(5, 3);
println!("The result is: {}", result);
}// math.rs
pub fn add(x: i32, y: i32) -> i32 {
x + y
}এখানে main.rs ফাইলে mod math; এর মাধ্যমে math.rs ফাইলটি অন্তর্ভুক্ত করা হয়েছে, এবং সেই ফাইল থেকে add ফাংশনটি ব্যবহার করা হয়েছে।
Namespaces (নেমস্পেস)
রাস্টে Namespaces একটি ব্যবস্থা যা নামের সংঘর্ষ থেকে রক্ষা পেতে সাহায্য করে। প্রতিটি মডিউল একটি আলাদা নেমস্পেস তৈরি করে, যেখানে একই নামের ফাংশন, স্ট্রাকচার, বা ভেরিয়েবল বিভিন্ন মডিউলে থাকতে পারে এবং একে অপরের সাথে সংঘর্ষ করবে না। এটি কোডের সংগঠন এবং পাঠযোগ্যতা বাড়াতে সাহায্য করে।
২.১ নেমস্পেসের ব্যবহার
নেমস্পেসের মাধ্যমে আপনি একই নামের উপাদানকে বিভিন্ন মডিউলে পৃথকভাবে ব্যবহার করতে পারেন। মডিউল এবং সাব-মডিউলগুলি নিজেদের মধ্যে আলাদা নেমস্পেস তৈরি করে, যা কোডের মধ্যে পরিষ্কারতা বজায় রাখতে সহায়তা করে।
উদাহরণ (নেমস্পেস ব্যবহার):
mod module_a {
pub fn greet() {
println!("Hello from Module A");
}
}
mod module_b {
pub fn greet() {
println!("Hello from Module B");
}
}
fn main() {
module_a::greet(); // Module A এর greet ফাংশন
module_b::greet(); // Module B এর greet ফাংশন
}এখানে module_a এবং module_b দুটি আলাদা মডিউল। প্রত্যেকটি মডিউল তাদের নিজস্ব greet ফাংশন ধারণ করছে। যেহেতু এই ফাংশন দুটি আলাদা নেমস্পেসে রয়েছে, তাই কোন একটির সাথে আরেকটির নামের সংঘর্ষ হচ্ছে না।
৩. মডিউল এবং নেমস্পেসের মধ্যে সম্পর্ক
রাস্টে মডিউল এবং নেমস্পেস একে অপরের সাথে ঘনিষ্ঠভাবে সম্পর্কিত। মডিউলগুলি নেমস্পেসের মতো কাজ করে এবং তাদের ভেতর সংজ্ঞায়িত সব উপাদানকে একটি আলাদা স্কোপে রাখে। এভাবে, এক মডিউল বা নেমস্পেসের উপাদান অন্য মডিউল বা নেমস্পেসের উপাদানের সাথে সংঘর্ষ করে না, এবং কোড আরও সংগঠিত থাকে।
৩.১ প্রক্সি/আলিয়াস ব্যবহার
নেমস্পেসের সাহায্যে আপনি একাধিক মডিউল বা উপাদানকে use কিওয়ার্ডের মাধ্যমে সহজেই একসাথে ব্যবহার করতে পারেন।
উদাহরণ (প্রক্সি বা আলিয়াস):
mod a {
pub fn hello() {
println!("Hello from module A");
}
}
mod b {
pub fn hello() {
println!("Hello from module B");
}
}
use a::hello as a_hello;
use b::hello as b_hello;
fn main() {
a_hello(); // Module A এর hello ফাংশন
b_hello(); // Module B এর hello ফাংশন
}এখানে, use কিওয়ার্ডের মাধ্যমে a::hello এবং b::hello কে আলিয়াস করা হয়েছে, যাতে তাদেরকে a_hello এবং b_hello নামে ব্যবহার করা যায়।
সারাংশ
- Modules হল রাস্টে কোড সংগঠিত করার একটি পদ্ধতি যা কোডের বিভাজন, পুনঃব্যবহারযোগ্যতা এবং গ্লোবাল নামের সংঘর্ষ এড়াতে সাহায্য করে।
- Namespaces একটি কাঠামো যা মডিউলগুলির মধ্যে আলাদা স্কোপ তৈরি করে, যেখানে একই নামের ফাংশন বা উপাদান একে অপরের সাথে সংঘর্ষ সৃষ্টি করে না।
- মডিউলগুলি একে অপরের মধ্যে নামের সংঘর্ষ এড়াতে সাহায্য করার জন্য নেমস্পেস হিসেবে কাজ করে।
Read more